/*
*author: Yixin Luo
*date: 14/6/23
*function:单项链表及功能实现
*/
#include<stdio.h>
#include<stdlib.h>
#define ElemType int
typedef struct LNode{
   ElemType data;
  struct LNode   *next;
}LNode, *LinkList;
void CreateList(LinkList* l,int n)//创建一个链表，有n个节点
{
    (*l)=(LinkList)malloc(sizeof(ElemType));
    (*l)->next=NULL;
    (*l)->data=12;
    int i;
    for(i=n;i>0;i--)
    {   
       LinkList p;
       p=(LinkList)malloc(sizeof(ElemType));
       scanf("%d",&(p->data));
       p->next=(*l)->next;
       (*l)->next=p;
    }
}
ElemType GetElem(LinkList *L,int i)//获取链表中第i位的数，并返回
{   
    LinkList p;
    p=(*L)->next;
   int j=1;
    while(p!=NULL&&j<=i)
    {
       p=p->next;j++;
    }
    return p->data;
}
void ListInsert(LinkList* L,int i,ElemType e)//链表中i位置前处插入e
{
   LinkList p=(*L)->next;
   int j=0;
   while(p!=NULL&&j<i-1)
   {
       p=p->next;
       i--;
   }
   LinkList s=(LinkList)malloc(sizeof(LNode));
   s->data=e;
   s->next=p->next;
   p->next=s;
}
void ListDelete(LinkList* L,int i)//删除第i个数据
{
   LinkList p=(*L);
   int j=1;
   while(p->next!=NULL&&j<i)
   {
      p=p->next;
      j++;
   }
   LinkList q=p->next;
   p->next=p->next->next;
   free(q);
}
void show(LinkList* l)//打印链表中的所有数据
{  int i=0;
  LinkList p=(*l)->next;
 while(p!=NULL)
 {
   i++;
   printf("the %d is: %d\n",i,p->data); 
   p=p->next;
 }
}
void MergeList(LinkList* la,LinkList* lb,LinkList* lc)
{
   LinkList pa=(*la)->next;
   LinkList pb=(*lb)->next;
   (*lc)=(*la);
   LinkList pc=(*la);
   while(pa&&pb)
   {
      if(pa->data<=pb->data)
      {
         pc->next=pa;
         pc=pa;
         pb=pa->next;
      }
      else
      {
         pc->next=pb;
         pc=pa;
         pb=pa->next;

      }
   }
   pc->next=pa?pa:pb;
   free((*lb));
}



